﻿Imports WSEntidades
Imports Utilerias
Imports WSDatos

Public Class MonedaBL
    Public Function RegistrarMoneda(ByVal TokenConexion As String, ByVal Moneda As MonedaBE, ByRef detResp As DetalleRespuesta) As Boolean
        Dim MonedaDAL As MonedaDAL = New MonedaDAL("")
        detResp.Mensajes = ""
        Try
            TokenConexion = RijndaelSimple.desencriptaDefault(TokenConexion)
            If (EsValidoPara(Enumeraciones.operacionesCatalogos.Registrar, Moneda, detResp.Mensajes)) Then
                MonedaDAL = New MonedaDAL(TokenConexion)
                If (MonedaDAL.existeMoneda(Moneda.DesMoneda)) Then
                    detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.Catalogo_PreviamenteRegistrado,
                                             "Existe un registro con la descripción de la moneda indicada." & vbCrLf & detResp.Mensajes)
                    Return False
                Else
                    If (MonedaDAL.registraMoneda(Moneda)) Then
                        detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.ProcesamientoOK,
                                                 "La Moneda se registro con éxito.")
                        Return True
                    Else
                        detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.Catalogo_NoFueRegistrado,
                                                 "La Moneda no pudo ser registrada en el sistema." & vbCrLf & detResp.Mensajes)
                        Return False
                    End If
                End If
            Else
                detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.ValoresInvalidos,
                                         "La Moneda no es valida para registrar: " & vbCrLf & detResp.Mensajes)
                Return False
            End If
        Catch ex As Exception
            Log.LogException(ex, "MonedaBL.RegistrarMoneda")
            detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.ExcepcionEnOperacion,
                                        detResp.Mensajes & "Excepción al registrar Moneda: " & ex.Message)
            Return False
        Finally
            MonedaDAL = Nothing
        End Try
    End Function

    Private Function EsValidoPara(ByVal tipoOperacion As Enumeraciones.operacionesCatalogos, ByRef Moneda As MonedaBE, ByRef mensaje As String) As Boolean
        mensaje = ""
        Try
            If (tipoOperacion = Enumeraciones.operacionesCatalogos.Actualizar) Then
                If (String.IsNullOrEmpty(Moneda.IdMoneda)) Then
                    mensaje &= "El Id de la Moneda es requerido." & vbCrLf
                Else
                    If (Moneda.IdMoneda <= 0) Then
                        mensaje &= "El Id de la Moneda debe ser mayor a 0 y estar previamente registrado." & vbCrLf
                    End If
                End If
            End If

            If (String.IsNullOrWhiteSpace(Moneda.DesMoneda)) Then
                mensaje &= "La descripcion de la moneda es obligatoria, no puede ir el campo vacio." & vbCrLf
            Else
                Moneda.DesMoneda = Moneda.DesMoneda.Trim
                If (Moneda.DesMoneda.Length > 50) Then
                    Moneda.DesMoneda = Moneda.DesMoneda.Substring(0, 50)
                End If
            End If
            If (String.IsNullOrWhiteSpace(Moneda.TipoCambio)) Then
                mensaje &= "El Tipo de Cambio de la moneda es obligatorio, no puede ir el campo vacio." & vbCrLf
            Else
                If Not (IsNumeric(Moneda.TipoCambio)) Then
                    mensaje &= "El Tipo de Cambio de la moneda debe ser de tipo numérico." & vbCrLf
                ElseIf (Moneda.TipoCambio <= 0 Or Moneda.TipoCambio > 9999.999999) Then
                    mensaje &= "El Tipo de Cambio de la moneda debe ser mayor a 0 y menor a 10000." & vbCrLf
                End If
            End If

            If (String.IsNullOrWhiteSpace(Moneda.ValorXML)) Then
                mensaje &= "El Valor en XML de la moneda es obligatorio." & vbCrLf
            Else
                Moneda.ValorXML = Moneda.ValorXML.Trim
                If (Moneda.ValorXML.Length > 50) Then
                    Moneda.ValorXML = Moneda.ValorXML.Substring(0, 50)
                End If
            End If

            If Not (String.IsNullOrWhiteSpace(Moneda.DescrCentavos)) Then
                Moneda.DescrCentavos = Moneda.DescrCentavos.Trim
                If (Moneda.DescrCentavos.Length > 20) Then
                    Moneda.DescrCentavos = Moneda.DescrCentavos.Substring(0, 20)
                End If
            End If

            Return (mensaje = "")
        Catch ex As Exception
            Log.LogException(ex, "MonedaBL.EsValidoParaRegistrar")
            mensaje &= ex.Message
            Return False
        End Try
    End Function

    Public Function ActualizaMoneda(ByVal TokenConexion As String, ByVal Moneda As MonedaBE, ByRef detResp As DetalleRespuesta) As Boolean
        detResp.Mensajes = ""
        Dim MonedaDAL As MonedaDAL = New MonedaDAL("")
        Try
            TokenConexion = RijndaelSimple.desencriptaDefault(TokenConexion)
            If (EsValidoPara(Enumeraciones.operacionesCatalogos.Actualizar, Moneda, detResp.Mensajes)) Then
                MonedaDAL = New MonedaDAL(TokenConexion)
                If (MonedaDAL.actualizaMoneda(Moneda, detResp.Mensajes)) Then
                    detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.ProcesamientoOK,
                                             "Datos de Moneda Actualizados.")
                    Return True
                Else
                    detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.Catalogo_NoFueActualizado,
                                             "No se pudo realizar la actualización de Datos de Moneda." & vbCrLf &
                                             "Verifique que el Id de Moneda esté registrado en el sistema." & vbCrLf & detResp.Mensajes)
                    Return False
                End If
            Else
                detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.ValoresInvalidos,
                                     "La informacion no es valida para actualizar: " & vbCrLf & detResp.Mensajes)
                Return False
            End If
        Catch ex As Exception
            Log.LogException(ex, "MonedaBL.ActualizaMoneda")
            detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.ExcepcionEnOperacion,
                                     detResp.Mensajes & "Excepción al actualizarMoneda: " & ex.Message)
            Return False
        Finally
            MonedaDAL = Nothing
        End Try
    End Function

    Public Function CambiaEstatusMoneda(ByVal tokenConexion As String, ByVal IdMoneda As Integer, ByVal setActivo As Boolean,
                                           ByRef detResp As DetalleRespuesta) As Boolean
        detResp.Mensajes = ""
        Dim MonedaDAL As MonedaDAL = New MonedaDAL("")
        Try
            If (EsValidoParaGetMoneda(IdMoneda, detResp.Mensajes)) Then
                MonedaDAL = New MonedaDAL(RijndaelSimple.desencriptaDefault(tokenConexion))
                If (MonedaDAL.actualizaEstatusMoneda(IdMoneda, setActivo)) Then
                    detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.ProcesamientoOK,
                                             "Estatus de la Moneda Actualizado.")
                    Return True
                Else
                    detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.Catalogo_NoFueActualizado,
                                             "No se pudo realizar la actualización de estatus de la Moneda." & vbCrLf &
                                             "Verifique que el Id de la Moneda esté registrado en el sistema." & vbCrLf & detResp.Mensajes)
                    Return False
                End If
            Else
                detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.ValoresInvalidos,
                                         "La informacion no es valida para actualizar: " & vbCrLf & detResp.Mensajes)
                Return False
            End If
        Catch ex As Exception
            Log.LogException(ex, "MonedaBL.CambiaEstatusMoneda")
            detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.ExcepcionEnOperacion,
                                     detResp.Mensajes & "Excepción al actualizar estatus de la Moneda: " & ex.Message)
            Return False
        Finally
            MonedaDAL = Nothing
        End Try
    End Function

    Public Function GetMoneda(ByVal tokenConexion As String, ByVal IdMoneda As Integer, ByRef detResp As DetalleRespuesta) As MonedaBE
        detResp.Mensajes = ""
        Dim MonedaDAL As MonedaDAL = New MonedaDAL("")
        Dim MonedaBE As MonedaBE
        Try
            tokenConexion = RijndaelSimple.desencriptaDefault(tokenConexion)
            If (EsValidoParaGetMoneda(IdMoneda, detResp.Mensajes)) Then
                MonedaDAL = New MonedaDAL(tokenConexion)
                MonedaBE = MonedaDAL.getMoneda(IdMoneda)
                If (MonedaBE IsNot Nothing) Then
                    detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.ProcesamientoOK,
                                             "Se obtuvo la información de la Moneda con éxito.")
                    Return MonedaBE
                Else
                    detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.Catalogo_RegistroInexistenteOInactivo,
                                             "No se obtuvo la información de la Moneda" & vbCrLf & detResp.Mensajes)
                    Return Nothing
                End If
            Else
                detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.ValoresInvalidos,
                                         "El ID de la Moneda contiene valor invalido " & vbCrLf & detResp.Mensajes)
                Return Nothing
            End If
        Catch ex As Exception
            Log.LogException(ex, "MonedaBL.GetMoneda")
            detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.ExcepcionEnOperacion,
                                        detResp.Mensajes & "Excepción al obtener información de la Moneda: " & ex.Message)
            Return Nothing
        Finally
            MonedaDAL = Nothing
            MonedaBE = Nothing
        End Try
    End Function

    Private Function EsValidoParaGetMoneda(ByRef IdMoneda As Integer, ByRef mensaje As String) As Boolean
        mensaje = ""
        Try
            If (String.IsNullOrEmpty(IdMoneda)) Then
                mensaje &= "El campo ID de la Moneda no puede ir  vacio." & vbCrLf
            Else
                If (IdMoneda <= 0) Then
                    mensaje &= String.Format("El ID <{0}> de la Moneda debe ser un valor mayor a 0", IdMoneda) & vbCrLf
                End If
            End If

            Return (mensaje = "")
        Catch ex As Exception
            Log.LogException(ex, "MonedaBL.EsValidoParaGetMoneda")
            mensaje &= ex.Message
            Return False
        End Try
    End Function

    Public Function GetListadoMoneda(ByVal tokenConexion As String, ByVal DesMoneda As String, ByVal tipoEstatus As Enumeraciones.estatusParaBusquedas,
                                     ByRef detResp As DetalleRespuesta) As List(Of MonedaBE)
        detResp.Mensajes = ""
        Dim MonedaDAL As MonedaDAL = New MonedaDAL("")
        Dim listMonedaBE As List(Of MonedaBE)
        Try
            tokenConexion = RijndaelSimple.desencriptaDefault(tokenConexion)
            MonedaDAL = New MonedaDAL(tokenConexion)
            listMonedaBE = MonedaDAL.getListadoMoneda(DesMoneda, tipoEstatus)
            If (listMonedaBE IsNot Nothing) Then
                detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.ProcesamientoOK,
                                         "Se obtuvo el listado de Monedas con éxito.")
                Return listMonedaBE
            Else
                detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.Catalogo_NoObtuvoRegistrosParaListado,
                                         "No se obtuvo el listado de las Monedas" & vbCrLf & detResp.Mensajes)
                Return Nothing
            End If
        Catch ex As Exception
            Log.LogException(ex, "MonedaBL.GetListadoMoneda")
            detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.ExcepcionEnOperacion,
                                        detResp.Mensajes & "Excepción al obtener el listado de Monedas: " & ex.Message)
            Return Nothing
        Finally
            MonedaDAL = Nothing
            listMonedaBE = Nothing
        End Try
    End Function

End Class
